<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<svg width="1" height="1" visibility="hidden">
</svg>
<script>
var svgElement = document.querySelector("svg");
var viewportWidth = window.innerWidth;
var viewportHeight = window.innerHeight;
var EPSILON = Math.pow(2, -8);

function viewportWidthPercent()
{
    return (viewportWidth / 100);
}

function viewportHeightPercent()
{
    return (viewportHeight / 100);
}

function viewportMinPercent()
{
    return (Math.min(viewportWidth, viewportHeight) / 100);
}

function viewportMaxPercent()
{
    return (Math.max(viewportWidth, viewportHeight) / 100);
}

test(function() {
    svgElement.setAttribute("width", "10vw");
    assert_approx_equals(svgElement.width.baseVal.value, 10 * viewportWidthPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 10);
    svgElement.width.baseVal.valueAsString = '2vw';
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 2);
    assert_approx_equals(svgElement.width.baseVal.value, 2 * viewportWidthPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_UNKNOWN);
}, "Tests vw unit");

test(function() {
    svgElement.setAttribute("width", "10vh");
    assert_approx_equals(svgElement.width.baseVal.value, 10 * viewportHeightPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 10);
    svgElement.width.baseVal.valueAsString = '2vh';
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 2);
    assert_approx_equals(svgElement.width.baseVal.value, 2 * viewportHeightPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_UNKNOWN);
}, "Tests vh unit");

test(function() {
    svgElement.setAttribute("width", "10vmin");
    assert_approx_equals(svgElement.width.baseVal.value, 10 * viewportMinPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 10);
    svgElement.width.baseVal.valueAsString = '2vmin';
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 2);
    assert_approx_equals(svgElement.width.baseVal.value, 2 * viewportMinPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_UNKNOWN);
}, "Tests vmin unit");

test(function() {
    svgElement.setAttribute("width", "10vmax");
    assert_approx_equals(svgElement.width.baseVal.value, 10 * viewportMaxPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 10);
    svgElement.width.baseVal.valueAsString = '2vmax';
    assert_equals(svgElement.width.baseVal.valueInSpecifiedUnits, 2);
    assert_approx_equals(svgElement.width.baseVal.value, 2 * viewportMaxPercent(), EPSILON);
    assert_equals(svgElement.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_UNKNOWN);
}, "Tests vmax unit");

</script>
